package com.airlines.crewassignment.service.crew;

import java.util.List;

import com.airlines.crewassignment.domain.Crew;
import com.airlines.crewassignment.domain.CrewTask;
import com.airlines.crewassignment.domain.DateTimeRange;
import com.airlines.crewassignment.domain.crew.CrewRestDateTime;

/**
 * @author xxxx
 * @date 2018年5月2日 
 * @description 空勤人员休息期计算服务
 */
public interface CrewRestDateTimeService {
	/**
	 * 从数据库中查询查询机组人员的休息期
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<CrewRestDateTime> listCrewRestDateTime(DateTimeRange dateTimeRange,List<Crew> crewList,String duty,String workcode);

	/**
	 * 高级算法：如果将一大段整的休息期，插入N个任务端后，返回M个连续的休息期？
	 * @param workcode
	 * @param taskListForEveryCrew
	 * @param superRest
	 * @return
	 */
	List<CrewRestDateTime> listCrewRestDateTime(String workcode, List<CrewTask> taskListForEveryCrew,
			DateTimeRange superRest);

	/**
	 * 将一堆的休息期片段，范围真实的，去重复的，连续的休息期
	 * 有了所有的休息期片段后，如何获取真实的休息期片段？ 算法规则：每个休息期片段，与其他所有的休息期片段的交集，即为真实的休息期片段
	 * @param workcode
	 * @param restDateTimeRangeAll
	 * @return
	 */
	List<CrewRestDateTime> listCrewRestDateTime(String workcode, List<DateTimeRange> restDateTimeRangeAll);
	
	
}
